#pragma once

typedef void (*modulecall_t)();

#if GCC_VERSION < 30300
# define __used			__attribute__((__unused__))
#else
# define __used			__attribute__((__used__))
#endif

#define module_init(fn) \
	static modulecall_t module_##fn __used \
	__attribute__((__section__(".module_init"))) = fn;

#define SECTION(seg)    __attribute__((section (seg)))

void init_modules();